Multimedia content is often digitally encoded in a compressed format to minimize an amount of storage necessary to store the multimedia content and to minimize the amount of bandwidth necessary for propagating the multimedia content to content viewers. One digital compression format that is currently very popular is the Moving Pictures Expert Group (MPEG) format. Digital television broadcast systems typically stream MPEG encoded multimedia content to digital television receivers which decode the MPEG stream for presentation onto a display, such as a television.
MPEG streams contain program clock references (PCRs) that are associated with each frame and delivered in what is called an adaptation field. PCRs are count values based on a local 27 MHz clock contained within an encoder—called a system time clock (STS)— that encodes the MPEG stream. The PCRs are used to synchronize a decoders local system time clock (LSTC) with the STS of the encoder. MPEG streams oftentimes also contain a presentation time stamp (PTS) for each coded picture in the MPEG streams. The PTS indicates the instant at which an encoded picture or audio block should be removed from the receiver buffer, instantaneously decoded, and presented for display.
When viewing multimedia content received in an MPEG stream, some viewers may wish to perform certain trick modes. A trick mode can be any playback of multimedia in which the playback is not done at normal speed or in a forward direction. Examples of trick modes are fast-forward, rewind, pause, etc. When a trick mode is to be performed on multimedia content decoded from an MPEG stream, it is recommended that the decoder ignore the PCR values and decode and display frames as they become available.
To implement this process, a DSM_trick_mode_flag is set to 1 within each packetized elementary stream (PES) of the MPEG stream that is processed during trick mode playback. When the DSM_trick_mode_flag is set to 1, it is generally recommended that the decoder neglect vbv_delay and temporal_reference values, and consecutively decode each picture, displaying it until a next picture is decoded. The vbv_delay is a 16 bit unsigned integer representing the number of 90 kHz clock periods between entering a picture's start code into a buffer and removing and decoding the entire picture. The temporal_reference value indicates an order in which MPEG Intra pictures, predicted pictures and bidirectional pictures (I, P and B frames, respectively) should be displayed. Some digital television receivers, such as Advanced Television Systems Committee (ATSC) receivers, do not follow the general recommendation, however. In consequence, such non-compliant receivers attempt to use the PTS and PCR values from the bitstream to decode and display video. Accordingly, these non-compliant receivers do not properly implement trickmode playback.